[レポート] マルチテナントアプリケーションのコア要素の構築を短時間で体験する「Zero to SaaS in one hour」に参加しました #SAS303
いわさです。
AWS re:Invent 2024 ではいくつか SaaS on AWS に関するセッションが提供されています。
Builders' session の SAS303「Zero to SaaS in one hour」に参加してみました。
会場の雰囲気
会場は MGM 3 階の部屋で開催されました。
実は私は Builders' session の参加は初でして、緊張しながら参加しました。
事前情報として「ビルダーズセッションは短時間のワークショップみたいなもんだよ」というのは聞いていました。
部屋に入ると 6 つほどのテーブルの集まりに分かれており、それぞれのテーブルに大きめのディスプレイとおそらく SA の方が待ち受けていました。
ひとつのテーブルあたり約 10 名の参加席が用意されています。部屋全体で 60 名ほどのようで、ほぼ満席でした。
Builders' session はたまに参加者の自己紹介から始まる場合があるという噂を聞いたことがあり、ドキドキしながら待っていたのですが、このセッションはありませんでした。
セッションの概要
re:Invent 2024 公式サイトのセッション概要を Amazon Translate で翻訳した内容が以下となります。
マルチテナントの SaaS アーキテクチャを構築するには、コントロールプレーンのフットプリント、ホストするサービス、オンボーディングの処理方法、サポートする階層、テナントの分離方法など、さまざまな設計およびアーキテクチャ戦略をチームが検討する必要があります。このセッションでは、SaaS アーキテクチャのコア要素について学びます。中核となる構成要素の構築について詳しく見ていきながら、自社のアプローチに影響する設計と実装に関する決定事項を強調してください。参加するにはラップトップを持参する必要があります。
スピーカー
- Jayasundar S, Sr Partner Solution Architect, Amazon Web Services India Limited
- Syed Hussain, Partner Solutions Architect, Amazon
- Dhammika Sriyananda, SaaS Factory Sr. PSA, Amazon Web Services
- Karthik Annamalaisamy, Senior Solutions Architect, AWS India
- Daniel Wirjo, Senior Solutions Architect, AWS Startups
LEVEL
- 300
セッション内容
参加者は Workshop Studio を使ってワークショップのような形式でアプリケーションへ変更を行っていきます。
基本的なサーバーレスな E コマースアプリケーションが用意されている状態で、そこに以下の 3 つを実装します。
- コントロールプレーンを SaaS Buider Toolkit for AWS (SBT) を使って構築する
- テナントコンテキストの実装
- テナント分離の実装
どれも SaaS on AWS の基本的な内容ではありますが、SaaS Builder Toolkit は新しい概念だと思います。
Saas Bulider Toolkit は、AWS での SaaS アプリケーションの間発を加速するために設計された、AWSのオープンソースフレームワークです。
SaaS アプリケーションを構築するための再利用可能な構造、独象化、ベストプラクティスを提供しています。
で、Builders' Session と Workshop の違いだと思うのですが、「Workshop Studio にアクセス出来たら、あとは各自でやってねー」という感じではありません。
各テーブルの SA の方と一緒に進めていくような感じで、結構会話が発生します。
1 時間での完了を目指すということもあって、ひとつひとつの要素の再学習やコードの実装時間などは最小限になるようにセッションが設計されています。
コードを変更してデプロイする部分についてもあらかじめ次のようにコードが用意されておりデプロイするだけです。
エディタに関しても事前に次のようにクラウド上に開発環境がセットアップ済みでした。
ラボ 1:コントロールプレーンの構築
CDK ベースの SaaS Builder Toolkit を実行し、さらにテナントプロビジョニングパイプラインもスクリプトで構築するようになっており、次の青枠部分を追加することが出来ます。
どういう動きをするかというと、SaaS アプリケーションに新しいテナントをオンボードすると、テナントプロビジョニングスクリプトがトリガーされ、Cognito リソースの詳細を取得してテナント管理者の自動作成まで行ってくれます。
トリガーは EventBridge で実行されます。
ラボ 2:テナントコンテキストの実装
テナントコンテキストの実装では SaaS ID からテナントコンテキストを抽出する基本的な部分と、データベース(ここでは DynamoDB)をテナントごとにデータパーティションを実装しています。
さらに、ログやメトリクスにもテナントコンテキストを注入し、オブザーバリティの観点でもテナントコンテキストの概念を導入しています。
具体的な実装方法としてはロガーの共通処理の中でリクエストコンテキストから認証情報を抽出してそこからテナント ID を抽出して使用します。
同じようにメトリクスについてもメトリクスを管理する共通処理が存在しており、そちらでテナントコンテキストの出力を行っています。
ラボ 3:テナント分離の実装
最後はテナント分離です。
今回は DynamoDB を使っていることから ABAC を使ったデータ分離を行っています。
アプリケーション側の具体的な実装方法としては、Lambda オーソライザーで STS をコールし、一時的なセキュリティ認証情報を取得して使う方式が取られています。
今回は Cognito ID プールを使っており、Lambda ロールではなくてオーソライザーを改造するだけで済んだみたいです。なるほどね。
さいごに
本日は「Zero to SaaS in one hour」の Builders' Sessions を紹介させて頂きました。
短時間でワークショップのような体験が出来るのでなかなか良いですね。
ただ、ワークショップと違って部分的な体験をするようなイメージなんでしょうか。今回はコア部分の本当に基本的なところをあくまでも体験出来たという感じで、実際に自分たちのサービスに実装するとなるとセッションで使った教材をしっかり理解する必要がありそうです。
もしコンテンツが公開されたらかなり役立ちそうだなと思いましたので、その際にはこちらのブログに追記したいと思います。